﻿using System;
namespace Negocios
{
    public class Audio
    {
        private string nome;

        public string Nome
        {
            get { return nome; }
            set
            {
                if (value.Length == 0)
                    throw new SystemException("O nome deverá ser informado.");
                else if (value.Length > 40)
                    throw new SystemException("Tamanho inválido de nome.");
                else
                    nome = value;
            }
        }
        private string localizacao;

          public string Localizacao
        {
            get { return localizacao; }
            set
            {
                if (value.Length > 40)
                    throw new SystemException("Tamanho inválido de localização.");
                else
                    localizacao = value;
            }
        }
        private Genero genero;
        public Genero Genero
        {
            get { return genero; }
            set
            {
                if (value == null)
                    throw new SystemException("O gênero deverá ser informado.");
                else if ( (new GeneroBLL()).Consultar(value.Codigo) == null)
                    throw new SystemException("Gênero desconhecido.");
                else
                    genero = value;
            }
        }
        private Autor autor;
         
        public Autor Autor
        {
            get { return autor; }
            set
            {
                if (value == null)
                    throw new SystemException("O autor deverá ser informado..");
                else if ( (new AutorBLL()).Consulta(value.Codigo) == null)
                    throw new SystemException("Autor desconhecido.");
                else
                    autor = value;
            }
        }    
        private Album album;
         
        public Album Album
        {
            get { return album; }
            set
            {
                if (value == null)
                    throw new SystemException("O album deverá ser informado..");
                else if ( (new AlbumBLL()).Consultar(value.Cod) == null)
                    throw new SystemException("Album desconhecido.");
                else
                    album = value;
            }
        }
        private Formato formato;
         
        public Formato Formato
        {
            get { return formato; }
            set
            {
                if (value == null)
                    throw new SystemException("O Formato deverá ser informado.");
                else if ( (new FormatoBLL()).Consulta(value.Codigo) == null)
                    throw new SystemException("Fomato desconhecido.");
                else
                    formato = value;
            }
        }
         private Especificacao especificacao;
         
        public Especificacao Especificacao
        {
            get { return especificacao; }
            set
            {
                if (value == null)
                    throw new SystemException("A Especificação deverá ser informada.");
                else if ( (new EspecificacaoBLL()).Consultar(value.Codigo) == null)
                    throw new SystemException("Especificação desconhecida.");
                else
                    especificacao = value;
            }
        }
        private SoftwareDeReproducao software;
         
        public SoftwareDeReproducao Software
        {
            get { return software; }
            set
            {
                if (value ==  null)
                    throw new SystemException("O Software deverá ser informado.");
                else if ( (new Software_De_ReproducaoBLL()).Consulta(value.Codigo) == null)
                    throw new SystemException("Software desconhecido.");
                else
                    software = value;
            }
        }
        private Usuario usuario;
        
        public Usuario Usuario
        {
            get { return usuario; }
            set
            {
                if (value == null)
                    throw new SystemException("O Usuário deverá ser informado.");
                else if ((new UsuarioBLL()).Consulta(value.Id) == null)
                    throw new SystemException("Usuário desconhecido.");
                else
                   usuario = value;
            }
        }


        private int codigo;

        public int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        public Audio(int codigo)
        {
            Codigo = codigo;
        }
        public Audio(string nome, string localizacao, Genero genero, Autor autor, Album album, Formato formato, Especificacao especificacao, SoftwareDeReproducao software, Usuario usuario)
        {
            Nome = nome;
            Localizacao = localizacao;
            Genero = genero;
            Autor = autor;
            Album = album;
            Formato = formato;
            Especificacao = especificacao;
            Software = software;
            Usuario = usuario;
        }
        public Audio(int codigo, string nome, string localizacao, Genero genero, Autor autor, Album album, Formato formato, Especificacao especificacao, SoftwareDeReproducao software, Usuario usuario)
        {
            Codigo = codigo;
            Nome = nome;
            Localizacao = localizacao;
            Genero = genero;
            Autor = autor;
            Album = album;
            Formato = formato;
            Especificacao = especificacao;
            Software = software;
            Usuario = usuario;
        }
    }
}